/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package jam.sfcc.common.data;

import jam.sfcc.common.domain.Cliente;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;

/**
 *
 * @author Marlon
 */
public class ClienteData extends BaseData {

    /**
     * Al crear una instancia de ClienteData se le pasan los valores para los atributos de la clase padre BaseData
     * @param userName tipo String que representa el nombre de usuario en MySql.
     * @param password tipo String que representa la contraseña del usuario en MySql. 
     */
    public ClienteData(String userName, String password) {
        super(userName, password);
     

    }

    public Cliente getCliente(String cedula) throws SQLException {
        Cliente cliente = new Cliente();
        Connection conexion = this.getConnection();
        String sqlSelect = "SELECT id_cliente,cedula,nombre,apellidos,direccion,telefono,estado_civil.cod_estado_civil,estado_civil.descripcion "
                + "FROM Cliente,estado_civil "
                + "WHERE estado_civil.cod_estado_civil=cliente.cod_estado_civil AND cedula=?";
        PreparedStatement statement = conexion.prepareStatement(sqlSelect);
        statement.setString(1, cedula);
        
        ResultSet resultSet = statement.executeQuery();
        if (resultSet.next()) {
            cliente.setIdCliente(resultSet.getInt("id_cliente"));
            cliente.setCedula(resultSet.getString("cedula"));
            cliente.setNombre(resultSet.getString("nombre"));
            cliente.setApellidos(resultSet.getString("apellidos"));
            cliente.setDireccion(resultSet.getString("direccion"));
            cliente.setTelefono(resultSet.getString("telefono"));
            cliente.getEstadoCivil().setCodEstado(resultSet.getInt("cod_estado_civil"));
            cliente.getEstadoCivil().setDescripcion(resultSet.getString("descripcion"));

        }
        statement.close();
        conexion.close();
        return cliente;
    }

    public LinkedList<Cliente> getClientes() throws SQLException {
        LinkedList<Cliente> clientes = new LinkedList<>();
        Connection conexion = this.getConnection();
        String sqlSelect = "SELECT id_cliente,cedula,nombre,apellidos,direccion,telefono,estado_civil.cod_estado_civil,estado_civil.descripcion "
                + "FROM Cliente,estado_civil "
                + "WHERE estado_civil.cod_estado_civil=cliente.cod_estado_civil";
        PreparedStatement statement = conexion.prepareStatement(sqlSelect);
        ResultSet resultSet = statement.executeQuery();
        while (resultSet.next()) {
            Cliente cliente = new Cliente();
            cliente.setIdCliente(resultSet.getInt("id_cliente"));
            cliente.setCedula(resultSet.getString("cedula"));
            cliente.setNombre(resultSet.getString("nombre"));
            cliente.setApellidos(resultSet.getString("apellidos"));
            cliente.setDireccion(resultSet.getString("direccion"));
            cliente.setTelefono(resultSet.getString("telefono"));
            cliente.getEstadoCivil().setCodEstado(Integer.parseInt(resultSet.getString("cod_estado_civil")));
            clientes.add(cliente);
        }
        statement.close();
        conexion.close();
        return clientes;
    }

    public void insertarCliente(Cliente cliente) throws SQLException {

        Connection conexion = this.getConnection();
        String sqlInsert = "INSERT INTO Cliente(cedula,nombre,apellidos,direccion,telefono,cod_estado_civil) "
                + "VALUES(?,?,?,?,?,?)";
        PreparedStatement statement = conexion.prepareStatement(sqlInsert);
        statement.setString(1, cliente.getCedula());
        statement.setString(2, cliente.getNombre());
        statement.setString(3, cliente.getApellidos());
        statement.setString(4, cliente.getDireccion());
        statement.setString(5, cliente.getTelefono());
        statement.setInt(6, cliente.getEstadoCivil().getCodEstado());
        statement.execute();
        statement.close();
        conexion.close();
    }

    public void editarCliente(Cliente cliente) throws SQLException {
        Connection conexion = this.getConnection();
        String sqlUpdate = "UPDATE Cliente "
                + "SET cedula=?,nombre=?,apellidos=?,direccion=?,telefono=?,cod_estado_civil=? "
                + "WHERE id_cliente=" + cliente.getIdCliente();
        PreparedStatement statement = conexion.prepareStatement(sqlUpdate);
        statement.setString(1, cliente.getCedula());
        statement.setString(2, cliente.getNombre());
        statement.setString(3, cliente.getApellidos());
        statement.setString(4, cliente.getDireccion());
        statement.setString(5, cliente.getTelefono());
        statement.setInt(6, cliente.getEstadoCivil().getCodEstado());
        statement.executeUpdate();
        statement.close();
        conexion.close();
    }

    public void borrarCliente(Cliente cliente) throws SQLException {
        Connection conexion = this.getConnection();
        String sqlDelete = "DELETE FROM Cliente "
                + "WHERE id_cliente=" + cliente.getIdCliente();
        PreparedStatement statement = conexion.prepareStatement(sqlDelete);
        statement.executeUpdate();
        statement.close();
        conexion.close();
    }
}
